<?php
/**
 * 设计模式--单例模式
 *  $_instance必须声明为静态的私有变量
 *  构造函数和析构函数必须声明为私有，防止外部程序new类从而失去单例模式的意义
 *  get_instance()方法必须设置为公有的，必须调用此方法返回实例的一个引用
 *  ::操作符只能访问静态变量和静态函数
 *  new 对象都会消耗内存
 *  使用场景:最常用的地方是数据库连接
 *  使用单例模式生成一个对象后，该对象可以被其它众多对象所使用
 * Created by PhpStorm.
 * User: Administrator
 * Date: 14-3-24
 * Time: 下午2:57
 */
class instance {
    //保存实例在此属性中
    private static $_instance;


    /**
     * 构造函数声明为private 防止直接创建对象
     */
    private function __construct(){
        echo '我被实例化了';
    }


    //单例方法
    public static function get_instance(){
        if(!isset(self::$_instance)){
            self::$_instance = new self();
        }
        return self::$_instance;
    }


    //阻止用户复制对象  重写了PHP 中clone方法
    public function __clone(){
        trigger_error('Clone is not allow',E_USER_ERROR);
    }

}

header('Content-Type: text/html;charset=utf-8');
$man = instance::get_instance();
$man1 = instance::get_instance();
$man2 = clone $man;      //报错


// 结果  ： 构造方法只执行一次     输出 -> 我被实例化了
